package db;

import beans.B_Equipo;
import beans.B_Persona;
import beans.B_Pregunta;
import beans.B_PreguntaResponsable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import beans.B_PreguntaTipoEvaluacion;
import beans.B_TipoEvaluacion;
import conexion.Conexion;
import java.sql.Types;

/**
 *
 * @author JoseHernan
 */
public class DB_PreguntaTipoEvaluacion {

    public static ArrayList<B_PreguntaTipoEvaluacion> getListByIdControlAuditoriaAndIsCumplimientoFalse(int idControlAuditoria) {
        ArrayList<B_PreguntaTipoEvaluacion> list = new ArrayList<B_PreguntaTipoEvaluacion>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" select pte.id, pte.id_pregunta, p.pregunta, p.peso_item, p.observacion, p.recomendacion, p.codigo, p.is_pregunta_cumplimiento, "
                    + " p.id_control_auditoria "
                    + " from tbl_pregunta_tipo_evaluacion pte "
                    + " inner join tbl_pregunta p on p.id = pte.id_pregunta "
                    + "	where pte.removed = false and p.removed = false and p.id_control_auditoria =  " + idControlAuditoria
                    + " and p.is_pregunta_cumplimiento = false and pte.id_tipo_evaluacion <> 1 ");
            rs = ps.executeQuery();
            B_PreguntaTipoEvaluacion obj;
            B_Pregunta objPregunta;
            while (rs.next()) {
                obj = new B_PreguntaTipoEvaluacion();
                //Asign values
                obj.setId(rs.getInt("id"));
                objPregunta = new B_Pregunta();
                objPregunta.setId(rs.getInt("id_pregunta"));
                objPregunta.setPesoItem(rs.getDouble("peso_item"));
                objPregunta.setPregunta(rs.getString("pregunta"));
                objPregunta.setObservacion(rs.getString("observacion"));
                objPregunta.setRecomendacion(rs.getString("recomendacion"));
                objPregunta.setIsPreguntaCumplimiento(rs.getBoolean("is_pregunta_cumplimiento"));
                objPregunta.setCodigo(rs.getString("codigo"));
                obj.setObjPregunta(objPregunta);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }
    
    public static ArrayList<B_PreguntaTipoEvaluacion> getListByIdControlAuditoriaAndIsCumplimientoTrue(int idControlAuditoria) {
        ArrayList<B_PreguntaTipoEvaluacion> list = new ArrayList<B_PreguntaTipoEvaluacion>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" select pte.id, pte.id_pregunta, p.pregunta, p.peso_item, p.observacion, p.recomendacion, p.codigo, p.is_pregunta_cumplimiento, "
                    + " p.id_control_auditoria, ifnull(concat(per.apellidos, ' ', per.nombres), '0') as nombre_completo, ifnull(e.id, '0') as id_equipo "
                    + " from tbl_pregunta_tipo_evaluacion pte "
                    + " inner join tbl_pregunta p on p.id = pte.id_pregunta "
                    + " left join tbl_pregunta_responsable pr on pr.id_pregunta = p.id "
                    + " left join tbl_equipo e on e.id = pr.id_responsable "
                    + " left join tbl_persona per on per.id = e.id_persona "
                    + "	where pte.removed = false and p.removed = false and p.id_control_auditoria =  " + idControlAuditoria
                    + " and p.is_pregunta_cumplimiento = true and pte.id_tipo_evaluacion = 1 ");
            rs = ps.executeQuery();
            B_PreguntaTipoEvaluacion obj;
            B_Pregunta objPregunta;
            while (rs.next()) {
                obj = new B_PreguntaTipoEvaluacion();
                //Asign values
                obj.setId(rs.getInt("id"));
                objPregunta = new B_Pregunta();
                objPregunta.setId(rs.getInt("id_pregunta"));
                objPregunta.setPesoItem(rs.getDouble("peso_item"));
                objPregunta.setPregunta(rs.getString("pregunta"));
                objPregunta.setObservacion(rs.getString("observacion"));
                objPregunta.setRecomendacion(rs.getString("recomendacion"));
                objPregunta.setIsPreguntaCumplimiento(rs.getBoolean("is_pregunta_cumplimiento"));
                objPregunta.setCodigo(rs.getString("codigo"));
                obj.setObjPregunta(objPregunta);
                obj.setRequerimiento(rs.getString("nombre_completo"));
                obj.setUser(rs.getString("id_equipo"));
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_PreguntaTipoEvaluacion> get(int id) {
        ArrayList<B_PreguntaTipoEvaluacion> list = new ArrayList<B_PreguntaTipoEvaluacion>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" select pte.id, pte.id_tipo_evaluacion, pte.requerimiento "
                    + "from tbl_pregunta_tipo_evaluacion pte "
                    + "where pte.removed = false and pte.id = " + id);
            rs = ps.executeQuery();
            B_PreguntaTipoEvaluacion obj;
            B_TipoEvaluacion objTipoEvaluacion;
            while (rs.next()) {
                obj = new B_PreguntaTipoEvaluacion();
                //Asign values
                obj.setId(rs.getInt("id"));
                obj.setRequerimiento(rs.getString("requerimiento"));
                objTipoEvaluacion = new B_TipoEvaluacion();
                objTipoEvaluacion.setId(rs.getInt("id_tipo_evaluacion"));
                obj.setObjTipoEvaluacion(objTipoEvaluacion);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_PreguntaTipoEvaluacion> getListByIdPregunta(int idPregunta) {
        ArrayList<B_PreguntaTipoEvaluacion> list = new ArrayList<B_PreguntaTipoEvaluacion>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" select pte.id, pte.id_tipo_evaluacion, e.nombre as tipo_evaluacion, pte.requerimiento, e.descripcion as tdesc "
                    + "from tbl_pregunta_tipo_evaluacion pte "
                    + "inner join tbl_tipo_evaluacion e on e.id = pte.id_tipo_evaluacion "
                    + "where pte.removed = false and e.removed = false and pte.id_pregunta = " + idPregunta
                    + " order by e.orden ");
            rs = ps.executeQuery();
            B_PreguntaTipoEvaluacion obj;
            B_TipoEvaluacion objTipoEvaluacion;
            while (rs.next()) {
                obj = new B_PreguntaTipoEvaluacion();
                //Asign values
                obj.setId(rs.getInt("id"));
                obj.setRequerimiento(rs.getString("requerimiento"));
                objTipoEvaluacion = new B_TipoEvaluacion();
                objTipoEvaluacion.setId(rs.getInt("id_tipo_evaluacion"));
                objTipoEvaluacion.setNombre(rs.getString("tipo_evaluacion"));
                objTipoEvaluacion.setDescripcion(rs.getString("tdesc"));
                obj.setObjTipoEvaluacion(objTipoEvaluacion);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    //SP CRUD
    public static String crud(B_PreguntaTipoEvaluacion obj, String action) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_crud_pregunta_tipo_evaluacion(?,?,?,?,?,?,?)}");

            cs.registerOutParameter("p_message", Types.VARCHAR);
            cs.setString("p_action", action);
            cs.setInt("p_id", obj.getId());
            cs.setInt("p_id_pregunta", obj.getObjPregunta().getId());
            cs.setInt("p_id_tipo_evaluacion", obj.getObjTipoEvaluacion().getId());
            cs.setString("p_requerimiento", obj.getRequerimiento());
            cs.setString("p_user", obj.getUser());
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }
}
